/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jam.sfcc.common.data;

import jam.sfcc.common.domain.Detalle;
import java.sql.Connection;
import jam.sfcc.common.domain.Orden;
import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

/**
 *
 * @author Josué
 */
public class OrdenData extends BaseData {

    public OrdenData(String userName, String password) {
        super(userName, password);
    }

    public void insertarOrden(Orden orden) throws SQLException {
        Connection conexion = this.getConnection();

        String spInsertarOrden = "{call insertar_orden(?,?,?,?,?,?)}";
        CallableStatement stmInsertarOrden = conexion.prepareCall(spInsertarOrden);
        stmInsertarOrden.registerOutParameter(1, Types.INTEGER);
        stmInsertarOrden.setDate(2, new Date(orden.getDate().getTime()));
        stmInsertarOrden.setString(3, orden.getFormaPago());
        stmInsertarOrden.setFloat(4, orden.getTotal());
        stmInsertarOrden.setInt(5, orden.getCliente().getIdCliente());
        stmInsertarOrden.setInt(6, orden.getVendedor().getIdVendedor());

        conexion.setAutoCommit(false);
        try {

            stmInsertarOrden.execute();
            orden.setCodOrden(stmInsertarOrden.getInt(1));
            stmInsertarOrden.close();

            String spInsertarDetalle = "{call insertar_detalle(?,?,?,?,?)}";
            CallableStatement stmInsertarDetalle = conexion.prepareCall(spInsertarDetalle);


            for (Detalle detalle : orden.getDetalles()) {

                stmInsertarDetalle.setInt(1, orden.getCodOrden());
                stmInsertarDetalle.setInt(2, detalle.getProducto().getCodProducto());
                stmInsertarDetalle.setInt(3, detalle.getCantidadSolicitada());
                stmInsertarDetalle.setFloat(4, detalle.getProducto().getPrecio());
                stmInsertarDetalle.setFloat(5, detalle.getTotal());
                stmInsertarDetalle.execute();
                stmInsertarDetalle.clearParameters();

            }//for

            stmInsertarDetalle.close();
            conexion.commit();
        } catch (SQLException sqle) {
            conexion.rollback();
        } finally {
            if (conexion != null) {
                conexion.close();
            }
        }


    }//insertarOrden

    public Orden getOrden(int codOrden) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlSelectOrden = "SELECT cod_orden,fecha,forma_pago,total,id_cliente,id_vendedor "
                              + "From Orden "
                              + "Where cod_orden="+codOrden;
        
        
        PreparedStatement stmtSelectOrden = conexion.prepareStatement(sqlSelectOrden);
        ResultSet resultSet = stmtSelectOrden.executeQuery();
        
        Orden orden=new Orden();
        if(resultSet.next()){
        orden.setCodOrden(resultSet.getInt("cod_orden"));
        orden.setDate(resultSet.getDate("fecha"));
        orden.setFormaPago(resultSet.getString("forma_pago"));
        orden.setTotal(resultSet.getFloat("total"));
        orden.getCliente().setIdCliente(resultSet.getInt("id_cliente"));
        orden.getVendedor().setIdVendedor(resultSet.getInt("id_vendedor"));
        }
        stmtSelectOrden.close();
        
        
        String sqlSelect="SELECT cedula,nombre_vendedor,apellidos_vendedor "
                        + "FROM vendedor "
                        + "WHERE id_vendedor = "+orden.getVendedor().getIdVendedor();
        PreparedStatement statementSelectVendedor=conexion.prepareStatement(sqlSelect);
        ResultSet resultSet1=statementSelectVendedor.executeQuery();
        //picha tengo un pedo mental -.-
        
        if(resultSet1.next()){
            
            orden.getVendedor().setCedula(resultSet1.getString("cedula"));
            orden.getVendedor().setNombre(resultSet1.getString("nombre_vendedor"));
            orden.getVendedor().setApellidos(resultSet1.getString("apellidos_vendedor"));
            
        }
        statementSelectVendedor.close();

     

        conexion.setAutoCommit(false);
        try {

          
            String sqlSelectCliente="SELECT cedula,nombre,apellidos,direccion,telefono,cod_estado_civil "
                                  + "FROM Cliente"
                                  + "WHERE id_cliente="+orden.getCliente().getIdCliente();
            
            PreparedStatement stmtSelectCliente=conexion.prepareStatement(sqlSelectCliente);
            ResultSet resultSet2= stmtSelectCliente.executeQuery();
            
            if(resultSet2.next()){
                
            }
            
            String spInsertarDetalle = "{call insertar_detalle(?,?,?,?,?)}";
            CallableStatement stmInsertarDetalle = conexion.prepareCall(spInsertarDetalle);


            for (Detalle detalle : orden.getDetalles()) {

                stmInsertarDetalle.setInt(1, orden.getCodOrden());
                stmInsertarDetalle.setInt(2, detalle.getProducto().getCodProducto());
                stmInsertarDetalle.setInt(3, detalle.getCantidadSolicitada());
                stmInsertarDetalle.setFloat(4, detalle.getProducto().getPrecio());
                stmInsertarDetalle.setFloat(5, detalle.getTotal());
                stmInsertarDetalle.execute();
                stmInsertarDetalle.clearParameters();

            }//for

            stmInsertarDetalle.close();
            conexion.commit();
        } catch (SQLException sqle) {
            conexion.rollback();
        } finally {
            if (conexion != null) {
                conexion.close();
            }
        }

        return orden;
    }
}
